home *** CD-ROM | disk | FTP | other *** search
- README for gdb-3.98 beta release
- John Gilmore 31 July 91
-
- This is GDB, the GNU source-level debugger, presently running under
- un*x. This is a beta test version of GDB version 4, and has not been
- extensively tested. It surely has some bugs, both bugs that were
- present in version 3, and new bugs. If your favorite bugfix is not
- yet present here, I encourage you to port it into this version and
- then send the diffs to bug-gdb@prep.ai.mit.edu.
-
- A summary of features new since gdb-3.5 is in the file `WHATS.NEW'.
-
-
- Unpacking and Installation
-
- This release moves the generic GNU include files, the BFD ("binary file
- description") library, the getopt routines, obstacks, and the readline
- library into the parent directory of gdb. The idea is that a variety
- of GNU tools can share a common copy of these things.
-
- These generic files are packaged separately from GDB, in a tar file
- called "bfd.ilrt-3.98.tar.Z". ("ilrt" stands for include, libiberty,
- readline, and texinfo). Unpack that tar file in the same directory in
- which you unpacked the gdb-3.98.tar.Z file, so that all the files in it
- will sit next to the 'gdb' directory. The whole top-level directory
- will look like this with `ls -F':
-
- Makefile.in configure* include/ texinfo/
- README.configure configure.in libiberty/
- bfd/ gdb/ readline/
-
- Once you have this stuff unpacked, and your current directory is here,
- you can type:
-
- ./configure HOSTNAME
- make
-
- and all the libraries, as well as GDB will be configured and built.
- If you get compiler warnings during this stage, see the `Reporting Bugs'
- section below; there are a few known problems.
-
- GDB can be used as a cross-debugger, running on a machine of one type
- while debugging a program running on a machine of another type. You
- configure it this way by specifying `./configure host -target=target';
- see below.
-
-
- More Documentation
-
- The GDB manual is much expanded and improved. For online browsing,
- gdb/gdb.info is the main file, and there are gdb/gdb.info-1 through -6
- files that can be installed into your main `info' tree. If you want a
- printed version of the manual, you can run, from the GDB source
- directory,
-
- make gdb.dvi
-
- to make the TeX device-independent output file. This assumes you have
- a running TeX on your system. The source for the GDB manual is in
- doc/gdb.texinfo (and a few other files it includes), provided with
- this distribution. The Makefile attempts to use the texinfo.tex
- supplied as part of the BFD-and-libraries tar file, since the manual
- uses Texinfo-2 which is not in common use yet.
-
-
- Configuration Details (extracted from gdb.texinfo)
-
- GDB is distributed with a `configure' script that automates the
- process of preparing GDB for installation; you can then use `make'
- to build the `gdb' program.
-
- The `configure' script that's specific to GDB is distributed in
- the main GDB source directory. However, building GDB also requires
- several other directories of source common to multiple GNU programs.
- These directories (GNU libraries and includes) are distributed
- separately, but their `configure' scripts and `Makefile's are
- designed to work together. To ensure that GDB's `Makefile' can find
- all the pieces, you should make a single overall directory to hold
- the directories of source for GNU libraries and includes, and you
- should install the GDB source directory there too. In this
- Appendix, we refer to the directory of GNU source directories as GNUSRC.
-
- At a minimum, to build GDB you need the directories
-
- `GNUSRC/gdb'
- the source specific to GDB itself
-
- `GNUSRC/bfd'
- source for the Binary File Descriptor Library
-
- `GNUSRC/include'
- GNU include files
-
- `GNUSRC/libiberty'
- source for the `-liberty' free software library
-
- `GNUSRC/readline'
- source for the GNU command-line interface
-
- Each of these directories has its own `configure' script. GNUSRC has
- an overall `configure' script, which is distributed with the GNU
- libraries and includes.
-
- `configure' is designed to be called recursively, so it is most
- convenient to run `configure' from the GNUSRC directory. The
- simplest way to configure and build GDB is the following:
-
- cd GNUSRC
- ./configure HOST
- make
-
- where HOST is something like `sun4' or `vax', that identifies the
- platform where GDB will run. This builds the three libraries `bfd',
- `readline', and `libiberty', then `gdb' itself. The configured
- source files, and the binaries, are left in the corresponding source
- directories.
-
- You can install `gdb' anywhere; it has no hardwired paths.
- However, you should make sure that the shell on your path (named by
- the `SHELL' environment variable) is publicly readable; some systems
- refuse to let GDB debug child processes whose programs are not
- readable, and GDB uses the shell to start your program.
-
-
- Configuration Subdirectories
-
- If you build GDB for several host or target machines, and if your
- `make' program handles the `VPATH' feature (GNU `make' does), it is
- most convenient instead to build the different GDB configurations in
- subdirectories (separate from the source). `configure' does this
- for you when you simultaneously specify several configurations; but
- it's a good habit even for a single configuration. You can specify
- the use of subdirectories using the `+forcesubdirs' option
- (abbreviated `+f'). For example, you can build GDB on a Sun 4 as
- follows:
-
- cd GNUSRC
- ./configure +f sun4
- cd Host-sun4/Target-sun4
- make
-
- When `configure' uses subdirectories to build programs or
- libraries, it creates nested directories `Host-HOST/Target-MACHINE'.
- This is because GDB can be configured for cross-compiling: GDB can
- run on one machine (the host) while debugging programs that run on
- another machine (the target). You specify cross-debugging targets
- by giving the `+target=MACHINE' option to `configure'. Specifying
- only hosts still gives you two levels of subdirectory for each host,
- with the same machine-name suffix on both. On the other hand,
- whenever you specify both hosts and targets on the same command
- line, `configure' creates all combinations of the hosts and targets you
- list.
-
- When you run `make' to build a program or library, you must run it
- in a configured directory. If you made a single configuration,
- without subdirectories, run `make' in the source directory. If you
- have `Host-HOST/Target-MACHINE' subdirectories, run `make' in those
- subdirectories.
-
- Each `configure' and `Makefile' under each source directory runs
- recursively, so that typing `make' in GNUSRC (or in a
- `GNUSRC/Host-HOST/Target-MACHINE' subdirectory) builds all the
- required libraries, then GDB.
-
- If you run `configure' from a directory (such as GNUSRC) that
- contains source directories for multiple libraries or programs,
- `configure' creates the `Host-HOST/Target-MACHINE' subdirectories in
- each library or program's source directory. For example, typing:
-
- cd GNUSRC
- configure sun4 +target=vx960
-
- creates the following directories:
-
- GNUSRC/Host-sun4/Target-vx960
- GNUSRC/bfd/Host-sun4/Target-vx960
- GNUSRC/gdb/Host-sun4/Target-vx960
- GNUSRC/libiberty/Host-sun4/Target-vx960
- GNUSRC/readline/Host-sun4/Target-vx960
-
- The `Makefile' in `GNUSRC/Host-sun4/Target-vx960' will `cd' to the
- appropriate lower-level directories (such as
- `GNUSRC/bfd/Host-sun4/Target-vx960'), building each in turn.
-
- When you have multiple hosts or targets configured, you can run
- `make' on them in parallel (for example, if they are NFS-mounted on
- each of the hosts); they will not interfere with each other.
-
-
- `configure' Options
-
- Here is a summary of all the `configure' options and arguments
- that you might use for building GDB:
-
- configure [+destdir=DIR] [+forcesubdirs] [+norecur] [+rm]
- [+target=MACHINE...] HOST...
-
- You may introduce options with the character `-' rather than `+' if
- you prefer; but options introduced with `+' may be truncated.
-
- `+destdir=DIR'
- DIR is an installation directory *path prefix*. After you
- configure with this option, `make install' will install GDB as
- `DIR/bin/gdb', and the libraries in `DIR/lib'. If you specify
-
- `+destdir=/usr/local', for example, `make install' creates
- `/usr/local/bin/gdb'.
-
- `+forcesubdirs'
- Write configuration specific files in subdirectories of the form
-
- Host-MACHINE/Target-MACHINE
-
- (and configure the `Makefile' to write binaries there too).
- Without this option, if you specify only one configuration for
- GDB, `configure' will use the same directory for source,
- configured files, and binaries. This option is used
- automatically if you specify more than one HOST or more than
- one `+target=MACHINE' option on the `configure' command line.
-
- `+norecur'
- Configure only the directory where `configure' is executed; do
- not propagate configuration to subdirectories.
-
- `+rm'
- Remove the configuration specified by other arguments.
-
- `+target=MACHINE ...'
- Configure GDB for cross-debugging programs running on each
- specified MACHINE. You may specify as many `+target' options
- as you wish. To see a list of available targets, execute `ls
- tconfig' in the GDB source directory. Without this option, GDB
- is configured to debug programs that run on the same machine
- (HOST) as GDB itself.
-
- `HOST ...'
- Configure GDB to run on each specified HOST. You may specify as
- many host names as you wish. To see a list of available hosts,
- execute `ls xconfig' in the GDB source directory.
-
- `configure' accepts other options, for compatibility with configuring
- other GNU tools recursively; but these are the only options that
- affect GDB or its supporting libraries.
-
-
- Languages other than C
-
- C++ support has been integrated into gdb. GDB should work with FORTRAN
- programs. (If you have problems, please send a bug report; you may
- have to refer to some FORTRAN variables with a trailing underscore).
- There is an effort to produce a GDB that works with Modula-2. I am not
- aware of anyone who is working on getting gdb to use the syntax of any
- other language. Pascal programs which use sets, subranges, file
- variables, or nested functions will not currently work.
-
-
- Kernel debugging
-
- I have't done this myself so I can't really offer any advice.
- Remote debugging over serial lines works fine, but the kernel debugging
- code in here has not been tested in years. Van Jacobson claims to have
- better kernel debugging, but won't release it for ordinary mortals.
-
-
- Remote debugging
-
- The files m68k-stub.c and i386-stub.c contain two examples of remote
- stubs to be used with remote.c. They are designeded to run standalone
- on a 68k or 386 cpu and communicate properly with the remote.c stub
- over a serial line.
-
- The file rem-multi.shar contains a general stub that can probably
- run on various different flavors of unix to allow debugging over a
- serial line from one machine to another.
-
- The files remote-eb.c and remote-nindy.c are two examples of remote
- interfaces for talking to existing ROM monitors (for the AMD 29000 and the
- Intel 960 repsectively).
-
- Remote-vx.c and the vx-share subdirectory contain a remote interface for the
- VxWorks realtime kernel, which communicates over TCP using the Sun
- RPC library. This would be a useful starting point for other remote-
- via-ethernet back ends.
-
- [This section seems to be out of date, I have never seen the "rapp"
- program, though I would like to. FIXME.]
- `rapp' runs under unix and acts as a remote stub (like rem-multi.shar
- distributed with GDB version 3). Currently it just works over UDP
- (network), not over a serial line. To get it running
- * Compile GDB on the host machine as usual
- * Compile rapp on the target machine, giving for both host and target
- the type of the target machine
- * Install "gdb" in /etc/services on both machines.
-
-
- Reporting Bugs
-
- The correct address for reporting bugs found in gdb is
- "bug-gdb@prep.ai.mit.edu". Please email all bugs to that address.
-
- "mcheck.c", line 32, will produce a pointer conversion warning, which
- can be ignored.
-
- When gdb reads object files produced by the Sun bundled C compiler,
- you will often get a "bad block start address patched" message. You
- can shut off such messages with the command `set complaint 0' (which
- you can put in your ~/.gdbinit if you like). Messages like this
- during symbol reading indicate some mismatch between the object file
- and GDB's symbol reading code (in this case, it's a mismatch
- between the specs for the object file format, and what Sun's compiler
- actually outputs).
-
- If you port gdb to a new machine, please send the required changes
- to bug-gdb@prep.ai.mit.edu. If your changes are more than a few
- lines, obtain and send in a copyright assignment from gnu@prep.ai.mit.edu, as
- described in the section `Writing Code for GDB'.
-
-
- X Windows versus GDB
-
- xgdb is obsolete. We are not doing any development or support of it.
-
- There is an "xxgdb", which shows more promise, which was posted to
- comp.sources.x.
-
- For those intersted in auto display of source and the availability of
- an editor while debugging I suggest trying gdb-mode in gnu-emacs
- (Try typing M-x gdb RETURN). Comments on this mode are welcome.
-
-
- About the machine-dependent files
-
- tconfig/<machine>
- This contains Makefile stuff for when the target system is <machine>.
- It also specifies the name of the tm-XXX.h file for this machine.
-
- xconfig/<machine>
- This contains Makefile stuff for when the host system is <machine>.
- It also specifies the name of the xm-XXX.h file for this machine.
-
- tm-XXX.h (tm.h is a link to this file, created by configure).
- This file contains macro definitions about the target machine's
- registers, stack frame format and instructions.
-
- xm-XXX.h (xm.h is a link to this file, created by configure).
- This contains macro definitions describing the host system environment,
- such as byte order, host C compiler and library, ptrace support,
- and core file structure.
-
- <machine>-opcode.h
- <machine>-pinsn.c
- These files contain the information necessary to print instructions
- for your cpu type. <machine>-opcode.h includes some large initialized
- data structures, which is strange for a ".h" file, but it's OK since
- it is only included in one place. <machine>-opcode.h is shared
- between the debugger and the assembler (if the GNU assembler has been
- ported to that machine), whereas <machine>-pinsn.c is specific to GDB.
-
- <machine>-tdep.c
- This file contains any miscellaneous code required for this machine
- as a target. On some machines it doesn't exist at all. Its existence
- is specified in the tconfig/XXX file.
-
- <machine>-xdep.c
- This file contains any miscellaneous code required for this machine
- as a host. On some machines it doesn't exist at all. Its existence
- is specified in the xconfig/XXX file.
-
- infptrace.c
- This is the low level interface to inferior processes for systems
- using the Unix ptrace call in a vanilla way. Some systems have their
- own routines in <machine>-xdep.c. Whether or not it is used
- is specified in the xconfig/XXX file.
-
- coredep.c
- Machine and system-dependent aspects of reading core files. Some
- machines use coredep.c; some have the routines in <machine>-xdep.c.
- Whether or not it is used is specified in the xconfig/XXX file.
- Now that BFD is used to read core files, virtually all machines should
- use coredep.c and should just provide fetch_core_registers in
- <machine>-xdep.c.
-
- exec.c
- Machine and system-dependent aspects of reading executable files.
- Some machines use exec.c; some have the routines in <machine>-tdep.c
- Since BFD, virtually all machines should use exec.c.
-
-
- Writing Code for GDB
-
- We appreciate having users contribute code that is of general use, but
- for it to be included in future GDB releases it must be cleanly
- written. We do not want to include changes that will needlessly make
- future maintainance difficult. It is not much harder to do things
- right, and in the long term it is worth it to the GNU project, and
- probably to you individually as well.
-
- Please code according to the GNU coding standards. If you do not have
- a copy, you can request one by sending mail to gnu@prep.ai.mit.edu.
-
- If you make substantial changes, you'll have to file a copyright
- assignment with the Free Software Foundation before we can produce a
- release that includes your changes. Send mail requesting the copyright
- assignment to gnu@prep.ai.mit.edu. Do this early, like before the
- changes actually work, or even before you start them, because a manager
- or lawyer on your end will probably make this a slow process.
-
- Please try to avoid making machine-specific changes to
- machine-independent files. If this is unavoidable, put a hook in the
- machine-independent file which calls a (possibly) machine-dependent
- macro (for example, the IGNORE_SYMBOL macro can be used for any
- symbols which need to be ignored on a specific machine. Calling
- IGNORE_SYMBOL in dbxread.c is a lot cleaner than a maze of #if
- defined's). The machine-independent code should do whatever "most"
- machines want if the macro is not defined in param.h. Using #if
- defined can sometimes be OK (e.g. SET_STACK_LIMIT_HUGE) but should be
- conditionalized on a specific feature of an operating system (set in
- tm.h or xm.h) rather than something like #if defined(vax) or #if
- defined(SYSV). If you use an #ifdef on some symbol that is defined
- in a header file (e.g. #ifdef TIOCSETP), *please* make sure that you
- have #include'd the relevant header file in that module!
-
- It is better to replace entire routines which may be system-specific,
- rather than put in a whole bunch of hooks which are probably not going
- to be helpful for any purpose other than your changes. For example,
- if you want to modify dbxread.c to deal with DBX debugging symbols
- which are in COFF files rather than BSD a.out files, do something
- along the lines of a macro GET_NEXT_SYMBOL, which could have
- different definitions for COFF and a.out, rather than trying to put
- the necessary changes throughout all the code in dbxread.c that
- currently assumes BSD format.
-
- Please avoid duplicating code. For example, in GDB 3.x all the stuff
- in infptrace.c was duplicated in *-dep.c, and so changing something
- was very painful. In GDB 4.x, these have all been consolidated
- into infptrace.c. infptrace.c can deal with variations between
- systems the same way any system-independent file would (hooks, #if
- defined, etc.), and machines which are radically different don't need
- to use infptrace.c at all. The same was true of core_file_command
- and exec_file_command.
-
-
- Debugging gdb with itself
-
- If gdb is limping on your machine, this is the preferred way to get it
- fully functional. Be warned that in some ancient Unix systems, like
- Ultrix 4.0, a program can't be running in one process while it is being
- debugged in another. Rather than doing "./gdb ./gdb", which works on
- Suns and such, you can copy gdb to gdb2 and then do "./gdb ./gdb2".
-
- When you run gdb in this directory, it will read a ".gdbinit" file that
- sets up some simple things to make debugging gdb easier. The "info"
- command, when executed without a subcommand in a gdb being debugged by
- gdb, will pop you back up to the top level gdb. See .gdbinit for details.
-
- If you use emacs, you will probably want to do a "make TAGS" after you
- configure your distribution; this will put the machine dependent
- routines for your local machine where they will be accessed first by a
- M-period.
-
- Also, make sure that you've compiled gdb with your local cc or taken
- appropriate precautions regarding ansification of include files. See
- the Makefile for more information.
-
- (this is for editing this file with GNU emacs)
- Local Variables:
- mode: text
- End:
-